python中在列表前面加星号(*)的作用

您所在的位置:网站首页 python 字典转为list python中在列表前面加星号(*)的作用

python中在列表前面加星号(*)的作用

#python中在列表前面加星号(*)的作用| 来源: 网络整理| 查看: 265

python 里面列表前面加星号, 例如 : *[1, 2, 3],这是什么用法?

1、先说作用: 作用是:将列表解开成几个独立的参数,传入函数。类似的运算符还有两个星号(**),是将字典解开成独立的元素作为形参。

例如:add(a,b)函数需要输入两个数,在主函数中list =  [1, 2]    c = add(*list),此处*list就表示的是将list中的两个数拆开之后分别输入,等价于c = add(list[0], list[1])。

这样做的目的是为了简化代码

2、再放代码:

def add(a, b):     return a + b     data = [4, 3] print(add(*data)) print(add(data[0], data[1])) # 等价于 print add(4, 3) data = {'a': 4, 'b': 3}  # 当将字典传入作为形参时。。。形参的名字和字典的键的名字要相同 print(add(**data))  # 这里可以两个*,但后续直接对字典操作则出错 # 等价于 print add(4, 3)   a = [1, 2, 3] b = (1, 2, 3) c = {1: "a", 2: "b", 3: "c"} print(a, "====", *a) print(b, "====", *b) print(c, "====", *c)  # 打印的是键,而不是值

其中的几个注意点:

1、当将字典传入作为形参时。。。形参的名字和字典的键的名字要相同,如图,字典的键为a,b,所以形参的名字也是a,b

2、只有在作为实参输入时,**data是正确的。如果直接对一个字典做**dict,python会报错。

3、*dict得到的是键而不是值,如代码中的*c

3、对向量操作 不光是列表、元组、字典,由numpy生成的向量也可以拆分;

4、用途 了解过函数中*args和**kwargs的人应该知道,这两个形参都接收若干个参数,通常我们将其称为参数组;

*args:接收若干个位置参数,转换成元组tuple形式

**kwargs:接收若干个关键字参数,转换成字典dict形式

ps:需要注意的是位置参数*args,一定要在关键字参数**kwargs前

例子:

def output(*args):     print(type(args))     for i in args:         print(i)     list = [1, 2, 3] output(list) output(*list)   输出: [1, 2, 3] 1 2 3

不难发现,如果不加*,add函数将整个列表当做一个元素使用,也就是add(([1,2,4,5],))。而带有*号的参数,此时相当于add((1, 2, 4, 5));

5、*号也可以作用于二维的列表 显然也是将列表进行拆分,结果是两个一维列表;如下代码所示

# 作用于二维列表 array = [[1, 2, 3],          [4, 5, 6]          ] print(array) print(*array) print(type(array)) print(type(*array))   输出: [[1, 2, 3], [4, 5, 6]] [1, 2, 3] [4, 5, 6]   print(type(*array)) TypeError: type() takes 1 or 3 arguments

如图,print(type(*array))会报错,这是因为type的输入不是一个导致的,这也说明,*号运算符将二维列表拆成两个列表

这么一看,这个带*变量的作用,就仿佛是把列表解开一层似的,而python中有一个zip函数,功能与之相反。

zip是将一个或多个可迭代对象进行包装压缩,返回将结果是列表;

通俗的说:zip()压缩可迭代对象,*号解压可迭代对象;

最后需要注意的是:

可迭代对象才可以使用*号拆分;

带*号变量严格来说并不是一个变量,而更应该称为参数,它是不能赋值给其他变量的,但可以作为参数传递;



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3